package com.ruoyi.bookkeeping.service;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.bookkeeping.domain.BookAsset;
import com.ruoyi.bookkeeping.domain.param.AddBookAssetParam;
import com.ruoyi.bookkeeping.domain.param.GetBookAssetParam;
import com.ruoyi.bookkeeping.domain.param.UpdateBookAssetParam;
import com.ruoyi.bookkeeping.domain.vo.*;

/**
 * 收支Service接口
 * 
 * @author ruoyi
 * @date 2023-02-24
 */
public interface IBookAssetService extends IService<BookAsset>
{
    /**
     * 查询收支
     * 
     * @param assetId 收支主键
     * @return 收支
     */
    public BookAssetVo selectBookAssetByAssetId(Long assetId);

    /**
     * 查询收支列表
     * @param getBookAssetParam
     * @param userId
     * @return
     */
    public List<BookAssetVo> selectBookAssetList(GetBookAssetParam getBookAssetParam, Long userId);

    /**
     * 查询收支列表
     * @param getBookAssetParam
     * @param userId
     * @return
     */
    public List<BookAsset> selectExportBookAssetList(GetBookAssetParam getBookAssetParam, Long userId);

    /**
     * 新增收支
     * @param addBookAssetParam
     * @param userId
     * @return
     */
    public int insertBookAsset(AddBookAssetParam addBookAssetParam,Long userId);

    /**
     * 修改收支
     * @param updateBookAssetParam
     * @param userId
     * @return
     */
    public int updateBookAsset(UpdateBookAssetParam updateBookAssetParam, Long userId);

    /**
     * 批量删除收支
     * 
     * @param assetIds 需要删除的收支主键集合
     * @return 结果
     */
    public int deleteBookAssetByAssetIds(Long[] assetIds,Long userId);


    /**
     * 饼图
     * @param date
     * @param userId
     * @return
     */
    PieVoList pie(Date date, Long userId);

    /**
     * 当月支出排行榜
     * @param date
     * @param userId
     * @return
     */
    List<PieVo> progressComparison(Date date, Long userId);

    /**
     * 近六个月的对比记录
     * @param userId
     * @return
     */
//    HistogramListVo histogram(Long userId);
   List<HistogramListVo> histogram(Long userId);

    List<BookAssetListVo> monthMaxAndMin(Long userId);

}
